package com.example.demo.sensitive.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.sensitive.entity.CheckTask;
import lombok.Data;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @ClassName CheckTaskMapper
 * @Description 检查任务数据访问层
 * @Author System
 * @Date 2025/9/19
 **/
@Mapper
public interface CheckTaskMapper extends BaseMapper<CheckTask> {

    /**
     * 分页查询任务
     */
    Page<CheckTask> selectPageWithCondition(Page<CheckTask> page,
                                           @Param("status") String status,
                                           @Param("startTime") LocalDateTime startTime,
                                           @Param("endTime") LocalDateTime endTime,
                                           @Param("keyword") String keyword);

    /**
     * 查询进行中的任务
     */
    List<CheckTask> selectRunningTasks();

    /**
     * 查询待执行的任务
     */
    List<CheckTask> selectPendingTasks();

    /**
     * 根据状态查询任务数量
     */
    int countByStatus(@Param("status") String status);

    /**
     * 查询超时的任务
     */
    List<CheckTask> selectTimeoutTasks(@Param("timeoutMinutes") int timeoutMinutes);

    /**
     * 更新任务进度
     */
    int updateProgress(@Param("id") Long id,
                      @Param("progress") Integer progress,
                      @Param("checkedTables") Integer checkedTables,
                      @Param("checkedRecords") Long checkedRecords,
                      @Param("foundIssues") Integer foundIssues);

    /**
     * 更新任务状态
     */
    int updateStatus(@Param("id") Long id,
                    @Param("status") String status,
                    @Param("errorMessage") String errorMessage);

    /**
     * 统计任务执行情况
     */
    TaskStatistics selectTaskStatistics(@Param("days") int days);

    /**
     * 任务统计内部类
     */
    @Data
    class TaskStatistics {
        private Integer totalTasks;
        private Integer completedTasks;
        private Integer failedTasks;
        private Long totalRecords;
        private Integer totalIssues;
    }
}
